home *** CD-ROM | disk | FTP | other *** search
/ Chip 2001 June / CHIP Haziran 2001.iso / prog / haziran / 19 / setup.exe / data.z / p9080_lib.h < prev    next >
C/C++ Source or Header  |  2001-04-11  |  6KB  |  162 lines

  1. #ifndef _P9080_LIB_H_
  2. #define _P9080_LIB_H_
  3.  
  4. #ifdef __KERNEL__
  5.     #include "../../../include/kdstdlib.h"
  6. #endif //__KERNEL__
  7. #include "../../../include/windrvr.h"
  8. #include "../../../samples/shared/pci_regs.h"
  9. #include "../../../samples/shared/bits.h"
  10.  
  11. #ifdef __cplusplus
  12. extern "C" {
  13. #endif
  14.  
  15. // PLX register definitions 
  16. enum {
  17.     P9080_LAS0RR     = 0x00,
  18.     P9080_LAS0BA     = 0x04,
  19.     P9080_EROMRR     = 0x10,
  20.     P9080_EROMBA     = 0x14,
  21.     P9080_LBRD0      = 0x18,
  22.     P9080_MBOX0      = 0x40,
  23.     P9080_MBOX1      = 0x44,
  24.     P9080_MBOX2      = 0x48,
  25.     P9080_MBOX3      = 0x4c,
  26.     P9080_MBOX4      = 0x50,
  27.     P9080_MBOX5      = 0x54,
  28.     P9080_MBOX6      = 0x58,
  29.     P9080_MBOX7      = 0x5c,
  30.     P9080_P2LDBELL   = 0x60,
  31.     P9080_L2PDBELL   = 0x64,
  32.     P9080_INTCSR     = 0x68,
  33.     P9080_CNTRL      = 0x6c
  34. };
  35.  
  36. // P9080 local registers
  37. enum {
  38.     P9080_DMAMODE    = 0x80,
  39.     P9080_DMAPADR    = 0x84,
  40.     P9080_DMALADR    = 0x88,
  41.     P9080_DMASIZ     = 0x8c,
  42.     P9080_DMADPR     = 0x90,
  43.     P9080_DMACSR     = 0xA8
  44. };
  45.  
  46. typedef enum
  47. {
  48.     P9080_DMA_CHANNEL_0 = 0,
  49.     P9080_DMA_CHANNEL_1 = 1
  50. } P9080_DMA_CHANNEL;
  51.  
  52. typedef enum
  53. {
  54.     P9080_MODE_BYTE   = 0,
  55.     P9080_MODE_WORD   = 1,
  56.     P9080_MODE_DWORD  = 2
  57. } P9080_MODE;
  58.  
  59. typedef enum
  60. {
  61.     P9080_ADDR_REG     = AD_PCI_BAR0,
  62.     P9080_ADDR_REG_IO  = AD_PCI_BAR1,
  63.     P9080_ADDR_SPACE0  = AD_PCI_BAR2,
  64.     P9080_ADDR_SPACE1  = AD_PCI_BAR3,
  65.     P9080_ADDR_SPACE2  = AD_PCI_BAR4,
  66.     P9080_ADDR_SPACE3  = AD_PCI_BAR5,
  67.     P9080_ADDR_EPROM   = AD_PCI_BAR_EPROM
  68. } P9080_ADDR;
  69.  
  70. enum { P9080_RANGE_REG = 0x00000080 };
  71.  
  72. typedef struct P9080_DMA_STRUCT *P9080_DMA_HANDLE;
  73.  
  74. typedef struct P9080_STRUCT *P9080_HANDLE;
  75.  
  76. typedef struct
  77. {
  78.     DWORD dwCounter;   // number of interrupts received
  79.     DWORD dwLost;      // number of interrupts not yet dealt with
  80.     BOOL fStopped;     // was interrupt disabled during wait
  81.     DWORD dwStatusReg; // value of status register when interrupt occured
  82. } P9080_INT_RESULT;
  83. typedef void (WINAPI *P9080_INT_HANDLER)( P9080_HANDLE hPlx, P9080_INT_RESULT *intResult);
  84.  
  85. // options for PLX_Open
  86. enum { P9080_OPEN_USE_INT =   0x1 };
  87. enum { P9080_CS46_EEPROM  =   0x2 };
  88.  
  89. DWORD P9080_CountCards (DWORD dwVendorID, DWORD dwDeviceID);
  90. BOOL P9080_Open (P9080_HANDLE *phPlx, DWORD dwVendorID, DWORD dwDeviceID, DWORD nCardNum, DWORD dwOptions);
  91. void P9080_Close (P9080_HANDLE hPlx);
  92. BOOL P9080_IsAddrSpaceActive(P9080_HANDLE hPlx, P9080_ADDR addrSpace);
  93. void P9080_GetPciSlot(P9080_HANDLE hPlx, WD_PCI_SLOT *pPciSlot);
  94.  
  95. void P9080_ReadWriteBlockLocal (P9080_HANDLE hPlx, DWORD dwLocalAddr, PVOID buf, 
  96.                     DWORD dwBytes, BOOL fIsRead, P9080_MODE mode);
  97. void P9080_ReadBlockLocal (P9080_HANDLE hPlx, DWORD dwLocalAddr, PVOID buf, DWORD dwBytes, P9080_MODE mode);
  98. void P9080_WriteBlockLocal (P9080_HANDLE hPlx, DWORD dwLocalAddr, PVOID buf, DWORD dwBytes, P9080_MODE mode);
  99. BYTE P9080_ReadByteLocal (P9080_HANDLE hPlx, DWORD dwLocalAddr);
  100. void P9080_WriteByteLocal (P9080_HANDLE hPlx, DWORD dwLocalAddr, BYTE data);
  101. WORD P9080_ReadWordLocal (P9080_HANDLE hPlx, DWORD dwLocalAddr);
  102. void P9080_WriteWordLocal (P9080_HANDLE hPlx, DWORD dwLocalAddr, WORD data);
  103. DWORD P9080_ReadDWordLocal (P9080_HANDLE hPlx, DWORD dwLocalAddr);
  104. void P9080_WriteDWordLocal (P9080_HANDLE hPlx, DWORD dwLocalAddr, DWORD data);
  105.  
  106. void P9080_ReadWriteBlock (P9080_HANDLE hPlx, DWORD dwOffset, PVOID buf, 
  107.                     DWORD dwBytes, BOOL fIsRead, P9080_ADDR addrSpace, P9080_MODE mode);
  108. BYTE P9080_ReadByte (P9080_HANDLE hPlx, P9080_ADDR addrSpace, DWORD dwOffset);
  109. void P9080_WriteByte (P9080_HANDLE hPlx, P9080_ADDR addrSpace, DWORD dwOffset, BYTE data);
  110. WORD P9080_ReadWord (P9080_HANDLE hPlx, P9080_ADDR addrSpace, DWORD dwOffset);
  111. void P9080_WriteWord (P9080_HANDLE hPlx, P9080_ADDR addrSpace, DWORD dwOffset, WORD data);
  112. DWORD P9080_ReadDWord (P9080_HANDLE hPlx, P9080_ADDR addrSpace, DWORD dwOffset);
  113. void P9080_WriteDWord (P9080_HANDLE hPlx, P9080_ADDR addrSpace, DWORD dwOffset, DWORD data);
  114. void P9080_ReadBlock (P9080_HANDLE hPlx, DWORD dwOffset, PVOID buf, 
  115.                     DWORD dwBytes, P9080_ADDR addrSpace, P9080_MODE mode);
  116. void P9080_WriteBlock (P9080_HANDLE hPlx, DWORD dwOffset, PVOID buf, 
  117.                      DWORD dwBytes, P9080_ADDR addrSpace, P9080_MODE mode);
  118.  
  119. // interrupt functions
  120. BOOL P9080_IntIsEnabled (P9080_HANDLE hPlx);
  121. BOOL P9080_IntEnable (P9080_HANDLE hPlx, P9080_INT_HANDLER funcIntHandler);
  122. void P9080_IntDisable (P9080_HANDLE hPlx);
  123.  
  124. // access registers
  125. DWORD P9080_ReadReg (P9080_HANDLE hPlx, DWORD dwReg);
  126. void P9080_WriteReg (P9080_HANDLE hPlx, DWORD dwReg, DWORD dwData);
  127.  
  128. // access PCI configuration registers
  129. DWORD P9080_ReadPCIReg(P9080_HANDLE hPlx, DWORD dwReg);
  130. void P9080_WritePCIReg(P9080_HANDLE hPlx, DWORD dwReg, DWORD dwData);
  131.  
  132. // Start DMA to/from card.
  133. // fIsRead - TRUE: read from card to buffer.  FALSE: write from buffer to card
  134. // dwBytes - number of bytes to transfer (must be a multiple of 4)
  135. // mode - local bus width.
  136. // dwLocalAddr - local address on card to write to / read from
  137. // channel - uses channel 0 or 1 of the 9080
  138. // buf - the buffer to transfer
  139. P9080_DMA_HANDLE P9080_DMAOpen (P9080_HANDLE hPlx, DWORD dwLocalAddr, PVOID buf, 
  140.     DWORD dwBytes, BOOL fIsRead, P9080_MODE mode, P9080_DMA_CHANNEL dmaChannel);
  141. void P9080_DMAClose (P9080_HANDLE hPlx, P9080_DMA_HANDLE hDma);
  142. void P9080_DMAStart (P9080_HANDLE hPlx, P9080_DMA_HANDLE hDma, BOOL fBlocking);
  143. BOOL P9080_DMAIsDone (P9080_HANDLE hPlx, P9080_DMA_HANDLE hDma);
  144. BOOL P9080_DMAReadWriteBlock (P9080_HANDLE hPlx, DWORD dwLocalAddr, PVOID buf, 
  145.     DWORD dwBytes, BOOL fIsRead, P9080_MODE mode, P9080_DMA_CHANNEL dmaChannel);
  146.  
  147. BOOL P9080_EEPROMReadWord(P9080_HANDLE hPlx, DWORD dwOffset, PWORD pwData);
  148. BOOL P9080_EEPROMWriteWord(P9080_HANDLE hPlx, DWORD dwOffset, WORD wData);
  149. BOOL P9080_EEPROMReadDWord(P9080_HANDLE hPlx, DWORD dwOffset, PDWORD pdwData);
  150. BOOL P9080_EEPROMWriteDWord(P9080_HANDLE hPlx, DWORD dwOffset, DWORD dwData);
  151. BOOL P9080_EEPROMValid(P9080_HANDLE hPlx);
  152.  
  153.  
  154. // this string is set to an error message, if one occurs
  155. extern CHAR P9080_ErrorString[];
  156.  
  157. #ifdef __cplusplus
  158. }
  159. #endif
  160.  
  161. #endif
  162.